package com.eimf.saf.common.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.stereotype.Service;

import com.eimf.saf.base.util.Page;
import com.eimf.saf.common.dao.DictTypeDao;
import com.eimf.saf.common.entity.Dict;
import com.eimf.saf.common.entity.DictType;
import com.eimf.saf.common.service.DictTypeService;
import com.eimf.saf.common.util.CommonCache;
import com.eimf.saf.security.exception.AppException;

/**
 * @author eden
 * @date 2013-11-14 下午4:02:11
 * @Description: 字典类型业务类实现类。
 */
@Service
public class DictTypeServiceImpl implements DictTypeService
{
    private DictTypeDao dictTypeDao;

    /**
     * 查询字典类型
     * */
    @Override
    public Page findDictTypePage(final HashMap<String, Object> param, final Page pager)
    {
        // 先设置总行数以及查询参数
        pager.setTotalRows(param, dictTypeDao.findCountDictType(param));
        // 然后查询并设置当前页数据
        pager.setList(dictTypeDao.findDictTypeList(param));
        return pager;
    }

    /**
     * 删除字典类型(物理删除，数据删除以后无法恢复),同时将有关联的数据字典一并删除
     * */
    @Override
    public void delDictTypeById(final String dictTypeId)
    {
        AppException.isNull(dictTypeId, "字典类型编号");
        // 删除字典类型
        dictTypeDao.delDictTypeById(dictTypeId);
        // 删除当前字典类型下所有数据字典
        dictTypeDao.delAllDict(dictTypeId);
        // 处理缓存字典数据
        CommonCache.removeDictMap(dictTypeId);
    }

    /**
     * 新增字典类型。
     */
    @Override
    public void addDictType(final DictType dictType)
    {
        AppException.isNull(dictType.getDictTypeId().trim(), "字典类型编号");
        dictTypeDao.addDictType(dictType);
        final String dictTypeId = dictType.getDictTypeId();
        List<Dict> list = CommonCache.getDictMap().get(dictTypeId);
        if (list == null)
        {
            list = new ArrayList<Dict>();
        }
        CommonCache.setDictMap(dictTypeId, list);
    }

    /**
     * 根据字典类型id获取该字典类型信息
     */
    @Override
    public DictType getDictTypeById(final String dictTypeId)
    {
        return dictTypeDao.findDictTypeById(dictTypeId);
    }

    /**
     * 修改字典类型。
     */
    @Override
    public int updDictType(final DictType dictType)
    {
        AppException.isNull(dictType.getDictTypeId().trim(), "字典类型编号");
        return dictTypeDao.updDictType(dictType);
    }

}
